/***********************************************************************
* Kenny Davidson - Project2 - Visitor.h
*
* Declares Abstract Visitor class
***********************************************************************/
#ifndef VISITOR_H
#define VISITOR_H

class Id;
class Number;
class Index;
class Char;
class String;
class StatementList;
class Command;
class Neg;

class Add;
class Sub;
class Mul;
class Div;
class Mod;

class Equ;

class And;
class Or;

class Less;
class LessEqual;
class Greater;
class GreaterEqual;
class DoubleEqual;
class NotEqual;

class While;
class If;

class FunctionCall;
class FunctionDefinition;
class Return;
class ParamNode;
class ArgNode;


class Visitor
{
	public:
		virtual ~Visitor() {}

		virtual void visitId( Id* ) =0;
		virtual void visitNumber( Number* ) =0;
		virtual void visitIndex( Index* ) =0;
		virtual void visitChar( Char* ) =0;
		virtual void visitString( String* ) =0;
		virtual void visitStatementList( StatementList* ) =0;
		virtual void visitCommand( Command* ) =0;
		virtual void visitNeg( Neg* ) =0;

		virtual void visitAdd( Add* ) =0;
		virtual void visitSub( Sub* ) =0;
		virtual void visitMul( Mul* ) =0;
		virtual void visitDiv( Div* ) =0;
		virtual void visitMod( Mod* ) =0;

		virtual void visitEqu( Equ* ) =0;

		virtual void visitAnd( And* ) =0;
		virtual void visitOr( Or* ) =0;

		virtual void visitLess( Less* ) =0;
		virtual void visitLessEqual( LessEqual* ) =0;
		virtual void visitGreater( Greater* ) =0;
		virtual void visitGreaterEqual( GreaterEqual* ) =0;
		virtual void visitDoubleEqual( DoubleEqual* ) =0;
		virtual void visitNotEqual( NotEqual* ) =0;

		virtual void visitWhile( While* ) =0;
		virtual void visitIf( If* ) =0;

		virtual void visitFunctionCall( FunctionCall * ) =0;
		virtual void visitFunctionDefinition( FunctionDefinition * ) =0;
		virtual void visitReturn( Return * ) =0;
		virtual void visitParamNode( ParamNode * ) =0;
		virtual void visitArgNode( ArgNode * ) =0;
};

#endif

